/**
 * @author 
 * @time 
 * @description 实现axios封装
 */
 import axios from 'axios'
 import { commonDefinition } from "../store"
 export const baseURL = import.meta.env.MODE === "development" ? '/xingqiu' : 'http://www.shuiyue.info:20000'
  const Axios = axios.create({
    baseURL,
    timeout:5000
  })

  let noInterceptorUrls = [
    '/user/validate/code',
    '/user/app/login'
]

  Axios.interceptors.request.use(function(config) {
    if (noInterceptorUrls.includes(config.url)) {
        return config
    }
    /**
     * 获取token，判断token是否存在，如果不存在，那么请求要终止，所以需要返回一个Promise.reject
     * 从pinia获取token数据，如果存在则需要把token注入到请求头，不存在则终止请求
     */
    let token = commonDefinition().getToken
    if (!!token) {
        config.headers.token = token
        return config
    }

    return Promise.reject({code: 1, message: '用户的token丢失'})
})


export default function Ajax(req) {
    /** 如果req没有传递，req.url也没有传递也要保存 */
    if (!req || !req.url) throw new TypeError('请求对象没有传递或则url地址参数没有传递')
    
    return new Promise(resolve => {
        Axios.request({
            url: req.url,
            method: req.method || 'POST',
            data: req.data || {},
            params: req.params || {}
        }).then(({ data }) => {
            resolve(data)
        }).catch(e => {
            resolve (e)
        })
    })
}